package Atop100.listNode;

import listNodePractice.ListNode;

import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.Stack;
import java.util.stream.Collectors;

public class Class206 {

    public ListNode reverseList(ListNode head) {

        //TODO:2023/10/24  实验证明使用栈的方法不太对
//        if(head==null){
//            return head;
//        }
//
//        ListNode p=head;
//        Stack<ListNode> stack=  new Stack<>();
//        while(p!=null){
//            stack.push(p);
//            p=p.next;
//        }
//        ListNode dumpy=new ListNode(-1);
//        ListNode p1=dumpy;
//        while(!stack.isEmpty()){
//            p1.next=stack.pop();
//            p1=p1.next;
//        }
//        return dumpy.next;

       //TODO:2023/10/24 使用ArrayList来接收
//        ArrayList<ListNode> listNodes = new ArrayList<>();
//        while (p!=null){
//            listNodes.add(p);
//            p=p.next;
//        }
//        Collections.reverse(listNodes);
//        for (ListNode a:listNodes
//             ) {
//            System.out.println(a.val);
//        }

        //TODO:2023/10/24  全新的方法  递归
//        if (head==null||head.next==null){
//            return  head;
//        }
//        ListNode pre = reverseList(head.next);
//        head.next.next=head;
//        head.next=null;
//        return pre;
        //TODO:2023/10/24 迭代的方法
//        ListNode pre,cur,next;
//        pre=null;
//        cur=head;
//        next=head;
//        while (cur!=null){
//            next=cur.next;
//            cur.next=pre;
//            pre=cur;
//            cur=next;
//        }
//        return  pre;

        ListNode  pre,cur,next;
        cur=head;
        next=head;
        pre=null;
        while (cur!=null){
          next=  cur.next;
          cur.next=pre;
          pre=cur;
          cur=next;
        }

        return   pre;





    }
    public static void main(String[] args) {
        Class206 class206 = new Class206();
        ListNode listNode1 = new ListNode(1);
        ListNode listNode2 = new ListNode(2);
        ListNode listNode3 = new ListNode(3);
        ListNode listNode4 = new ListNode(4);
        ListNode listNode5 = new ListNode(5);
        listNode1.next=listNode2;
        listNode2.next=listNode3;
        listNode3.next=listNode4;
        listNode4.next=listNode5;
        class206.reverseList(listNode1);
//        ListNode listNode = class206.reverseList(listNode1);
//        while (listNode!=null){
//            System.out.println(listNode.val);
//            listNode=listNode.next;
//        }
    }
}
